package com.example.oss.annotation;


import com.example.oss.validator.MultipartFileValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * <h1>文件验证注解</h1>
 * @author LevelCoder
 * @version V1.0.0
 * @email LevelCoder@126.com
 * @date 2020/5/8
 */

@Target({ElementType.FIELD, ElementType.PARAMETER,ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MultipartFileValidator.class)
public @interface ValidFile {

    /**
     * 设置默认最大值:为不限制大小
     */
    String DEFAULT_MAXSIZE = "-1";

    /**
     * AliasFor("endsWith")
     */
    String[] value() default {};

    /**
     * 支持的文件后缀类型,默认全部,AliasFor("value")
     */
    String[] endsWith() default {};

    /**
     * 文件后缀是否区分大小写
     */
    boolean ignoreCase() default true;

    /**
     * 上传的文件是否允许为空
     */
    boolean allowEmpty() default false;

    /**
     * 文件最大大小 对应的值可以为MB/KB,默认不限制,必须小于等于yml文件中上传配置
     */
    String maxSize() default DEFAULT_MAXSIZE;

    /**
     * 文件最小大小 对应的值可以为MB/KB
     */
    String minSize() default "0";

    String message() default "The uploaded file is not verified.";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
